#include <stdio.h>
#include <stdlib.h>
//顺序表的初始化和插入，删除实战

#define MaxSize 50
typedef int ElemType;  //让顺序表存储其他类型元素时，可以快速完成代码修改
//静态分配
typedef struct {
    ElemType data[MaxSize];
    int length;
}SqList;

//顺序表的插入，因为L要改变所以这里要用引用。i是插入位置
bool ListInsert(SqList &L,int i,ElemType element)
{
    //判断i是否合法
    if(i<1||i>L.length+1)
    {
        return false;
    }
    //如果储存空间满了，就不能插入了
    if(L.length==MaxSize)
    {
        return false;
    }
    //把后面元素依次往后移，空出位置，来插入元素
    for (int j = L.length; j >= i; j--)
    {
        L.data[j]=L.data[j-1];
    }
    L.data[i-1]=element; //放入要插入的元素
    L.length++; //顺序表长度加一
    return true; //插入成功返回true
}
//顺序表的删除操作,形参要改变就要用引用&。i是要删除的位置，e是为了获取被删除的元素的值
bool ListDelete(SqList &L,int i,ElemType &e)
{
    //判断i是否合法
    if(i<1||i>L.length)
    {
        return false;
    }
    //保存被删除的元素的值
    e=L.data[i-1];
    //往前移动元素
    for (int j = i; j < L.length; ++j) {
        L.data[j-1]=L.data[j];
    }
    //列表长度减1
    L.length--;
    return true;
}
// 查找某个元素值，找到就返回对应位置，没有找到返回0
int LocateElem(SqList L,ElemType element)
{
    for (int i = 0; i < L.length; ++i) {
        if(element==L.data[i])
        {
            return i+1;  //i是数组下标，i加1才是顺序表的下标
        }
    }
    return 0; // 循环结束没找到
}
// 打印顺序表
void PrintList(SqList L)
{
    for (int i = 0; i < L.length; ++i)
    {
        printf("%3d",L.data[i]);
    }
    printf("\n");
}

int main() {
    SqList L; //定义一个顺序表，变量L
    bool ret; //ret用来装函数返回值
    L.data[0]=1; //放置元素
    L.data[1]=2;
    L.data[2]=3;
    L.length=3; //设置长度
    ret=ListInsert(L,4,60);
    if(ret)
    {
        printf("insert SqList successfully\n");
        PrintList(L);
    } else{
        printf("insert SqList failed\n");
    }
    printf("--------------------------------\n");
    ElemType del; //要删除的元素
    ret=ListDelete(L,1,del);
    if(ret)
    {
        printf("delete SqList successfully\n");
        printf("delete element is %d\n",del);
        PrintList(L);
    } else{
        printf("delete SqList failed\n");
    }
    printf("--------------------------------\n");
    int pos;
    pos=LocateElem(L,60);
    if(pos)
    {
        printf("find this element successfully\n");
        printf("element position is %d\n",pos);
        PrintList(L);
    } else{
        printf("find this element failed\n");
    }
    return 0;
}
